const path = require('path');
const multer = require('multer');

// 支持的文件类型白名单
const allowedMimeTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif'];

// 文件保存路径（可替换为环境变量或配置文件）
const filePath = path.resolve(__dirname, '../public/images/');

const storage = multer.diskStorage({
  // 配置上传目录
  destination: function (req, file, callback) {
    callback(null, filePath+'/'+req.body.dir);
  },
  // 修改上传后的文件名
  // filename: function (req, file, callback) {
  //   const extName = path.extname(file.originalname);
  //   const baseName = path.basename(file.originalname, extName);
  //   const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)
  //   callback(null, `${baseName}-${uniqueSuffix}${extName}`);
  // }
    // 修改上传后的文件名 - 修复中文乱码
  filename: function (req, file, callback) {
    // 核心修复：转换文件名编码 (latin1 → utf8)
    const decodedName = Buffer.from(file.originalname, 'latin1').toString('utf8');
    // 使用解码后的文件名提取扩展名和基础名
    const extName = path.extname(decodedName);
    const baseName = path.basename(decodedName, extName);
    
    // 添加唯一后缀避免重名冲突
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    
    // 组装最终文件名：基础名 + 唯一后缀 + 扩展名
    callback(null, `${baseName}-${uniqueSuffix}${extName}`);
  }
});

// 文件过滤器：限制上传类型
function fileFilter(req, file, callback) {
  if (allowedMimeTypes.includes(file.mimetype)) {
    callback(null, true);
  } else {
    callback(new Error('不支持的文件类型'), false);
  }
}

const upload = multer({
  storage: storage,
  fileFilter: fileFilter
});

module.exports = {
  upload,
};